package org.example.classtopia.Config;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * AI配置类 - 接入通义千问，支持ChatMemory
 */
@Configuration
public class AiConfig {

        /**
         * 配置ChatMemory，使用JDBC存储库实现持久化
         */
        @Bean
        public ChatMemory chatMemory(ChatMemoryRepository chatMemoryRepository) {
                return MessageWindowChatMemory.builder()
                                .chatMemoryRepository(chatMemoryRepository)
                                .maxMessages(20) // 保留最近20条消息作为上下文
                                .build();
        }

        /**
         * 配置ChatClient，集成Chat Memory功能
         */
        @Bean
        public ChatClient chatClient(OpenAiChatModel model, ChatMemory chatMemory) {
                return ChatClient.builder(model)
                                .defaultSystem("你是一个专业的学习助手，专为大学生提供学习计划、课程推荐、学习资源和学习方法等服务。你的主要功能包括：\\n" +
                                                "1. 当用户要求制定学习计划时，根据你的理解和联网搜索内容来提供适合用户的学习计划。\\n" +
                                                "2. 当用户要求课程推荐时，根据用户的兴趣、专业或目标，联网搜索并推荐合适的课程。\\n" +
                                                "3. 当用户要求学习资源时，根据用户的具体需求，联网搜索并提供可下载的学习资料。\\n" +
                                                "4. 当用户要求学习方法时，根据用户要学的科目的联网搜索内容以及你的理解，针对性地制定学习方法和建议。\\n" +
                                                "5. 当用户要求日程个性化安排时，根据用户日程内容以及联网内容，针对性地提出适合大学生的当天日程安排。\\n" +
                                                "请用友好、专业的语气与用户交流，根据你的理解和联网内容主动输出安排和推荐，减少提问，帮助用户高效学习和成长。")
                                .defaultAdvisors(
                                                new SimpleLoggerAdvisor(),
                                                MessageChatMemoryAdvisor.builder(chatMemory).build())
                                .build();
        }
}